/*	Nama file		: DateTime.h
	Deskripsi		: Deklarasi type dan prototype primitif type DateTime
	Nama pembuat	: Jonathan Ery Pradana (23512038), Muhammad Ghufron Mahfudhi (23512066), Ni Made Satvika Iswari (23512077)
	Hari / Tanggal	: Selasa, 25 September 2012
	Editor			: Senin, 1 Oktober 2012 oleh Muhammad Ghufron Mahfudhi (IsEqDT, IsDTBefore, IsDTAfter)
*/

#ifndef DateTime_H
#define DateTime_H
#include "..\Date\Date.h"
#include "..\Time\Time.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct{
	Date date;	//Tanggal dari DateTime
	Time time;	//Waktu dari DateTime
}DateTime;

/** Getter dan Setter **/
Date GetDate(DateTime dateTime);
/* Mengembalikan Tanggal dari dateTime */
Time GetTime(DateTime dateTime);
/* Mengembalikan Waktu dari dateTime */

void SetDate(DateTime *dateTime, Date newDate);
/* Proses : Mengubah nilai Tanggal dari dateTime */
/* I.S : dateTime sudah terbentuk, newDate terdefinisi */
/* F.S : Date dari dateTime berisi newDate */
void SetTime(DateTime *dateTime, Time newTime); 
/* Proses : Mengubah nilai Waktu dari dateTime */
/* I.S : dateTime sudah terbentuk, newTime terdefinisi */
/* F.S : Time dari dateTime berisi newTime */ 

/** Konstruktor **/
DateTime MakeDateTime (Date newDate, Time newTime);
/* Membentuk DateTime dari Tanggal newDate dan Waktu newTime */
/* Prekondisi : newDate dan newTime dapat membentuk DateTime yang valid */
DateTime MakeDateTimefromStr(char str[]);
/* Membentuk DateTime dari elemen yang bertipe string */

/** Operator Baca Tulis **/
void BacaDateTime(DateTime *dateTime);
/* I.S. Sembarang */
/* F.S. dateTime terdefinisi dan merupakan dateTime yang valid */
/* Proses : Membaca komponen dateTime dari masukan pengguna */

void TulisDateTime(DateTime dateTime);
/* I.S. dateTime terdefinisi */
/* F.S. Nilai dateTime ditulis ke layar beserta komponen-komponennya */
/* Proses : Menulis nilai setiap komponen dateTime ke layar */

/* Predikat */
int IsEqDT (DateTime D1, DateTime D2);
/*	Menghasilkan 1 jika D1 = D2 */
int IsDTBefore (DateTime D1, DateTime D2);
/*	Menghasilkan 1 jika D1 adalah tanggal sebelum D2 */
int IsDTAfter (DateTime D1, DateTime D2);
/*	Menghasilkan 1 jika D1 adalah tanggal sesudah D2 */
int NBMonth(DateTime *D, int NBD);
/*	Menghasilkan banyaknya bulan yang terdapat dalam jangkauan array DateTime D */
char* DateTimeToString (DateTime DT);
/* Mengembalikan DateTime dalam format dd/mm/yyy hh:mm:ss */

#endif
